#include <iostream>
#include <memory>
#include <cstring>

class Computer {
private:
    char* _brand;  // 仍然用原始指针（测试是否泄漏）
    int _price;

    Computer(const char* brand, int price)
        : _brand(new char[strlen(brand) + 1]),
          _price(price) 
    {
        strcpy(_brand, brand);
        std::cout << "Computer 构造函数" << std::endl;
    }

public:
    ~Computer() {
//        delete[] _brand;  // 手动释放 _brand
        std::cout << "Computer 析构函数" << std::endl;
    }

    // 禁止拷贝（保持你的设计）
    Computer(const Computer&) = delete;
    Computer& operator=(const Computer&) = delete;

    // 工厂方法返回 unique_ptr
    static std::unique_ptr<Computer> create(const char* brand, int price) {
        return std::unique_ptr<Computer>(new Computer(brand, price));
    }

    void print() const {
        std::cout << "brand: " << _brand << ", price: " << _price << std::endl;
    }
};

int main() {
    // 用 unique_ptr 管理 Computer 对象
    auto cpt1 = Computer::create("apple", 1000);
    cpt1->print();

    auto cpt2 = Computer::create("xiaomi", 2000);
    cpt2->print();

    // 不需要手动 delete，unique_ptr 离开作用域时自动调用析构函数
    return 0;
}
